package com.zmm.weblog.web.cglib;

import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;


public class ShoppingProxy implements MethodInterceptor {

    // 被代理对象
    private Apple apple;

    public ShoppingProxy(Apple apple) {
        this.apple = apple;
    }

    /**
     * 定义原方法的增强方式
     *
     * @param obj    被代理对象
     * @param method 被代理对象调用的方法
     * @param args   被代理对象调用的方法时，传入的参数
     * @param proxy  底层生成的代理类的引用
     * @return 方法的返回值
     * @throws Throwable
     */
    @Override
    public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
        String name = method.getName();
        if ("sell".equals(name)) {
            double price = (double) args[0] * 0.8;
            Object result = method.invoke(apple, price);
            return result + "数据线";
        } else if ("repair".equals(name)) {
            System.out.println("专属客服为你服务！");
            return method.invoke(apple, args);
        } else {
            return method.invoke(apple, args);
        }
    }
}
